プロキシ経由でZabbixのメール通知をしてみた
はじめに
こんにちは。
くコ:彡がトレードマークの阿部です。
プロキシ経由でZabbix Serverのメール通知をしてみました。
メール通知には、AWS CLIのsend-email
コマンドを使います。
検証環境
- Proxyサーバ
- AmazonLinux 2016.03
- Squid 3.1.23
- Zabbixサーバ
- Red Hat Enterprise Linux Server release 7.2
- GNU bash 4.2.46(1)-release
- Zabbix Server 3.0.1
- aws-cli 1.10.20
AMCからの作業
SESでのメールアドレスの検証
AWSマネージメントコンソール(以下、AMC)のSES画面にアクセスし、メールアドレスの検証を行います。
通知に使用するToアドレスとFromアドレスを検証して、それを所有する事を示します。
こちらに記載の「Eメールアドレスの検証」をオレゴンリージョンで実施して下さい。
サンドボックスの外への移動
デフォルトではSESはサンドボックス環境に配置され、制限を受けます。
特にZabbixの場合、送信メッセージは24時間あたり200通までという制限にかかりやすいかと思います。
SESを本番利用する場合、AWSに申請を行い外へ移動しましょう。
なお、サンドボックス外に移動した場合、Toアドレスの検証は不要になります。Fromアドレスの検証は引き続き必要です。
移動の手順と制限の詳細は、こちらを参照ください。
SES通知スクリプト
前提条件
aws --version
コマンドを実行し、AWS CLIが利用可能な事を確認します。
インストールされていない場合、こちらを参照しインストールして下さい。
IAMでsend-email
を実行する権限を与えてください。スクリプトはIAM Roleを使う事を前提にしています。
コード
Zabbix GUIから設定する内容が、スクリプトの引数になります。
プロキシ設定については、こちらを参照し適宜変更下さい。
スクリプトは、zabbix_server.conf中のAlertScriptsPath
で指定されたパスに配置します。
検証環境では/usr/lib/zabbix/alertscripts/ses-sendemail.sh
として保存し、パーミッションは-rwxr-xr-x root root
としました。
#!/bin/bash # AWSリージョン(オレゴン) region='us-west-2' # HTTPプロキシ export HTTP_PROXY='http://ProxyServer-PrivateIPAddress:8080' export HTTPS_PROXY='http://ProxyServer-PrivateIPAddress:8080' export NO_PROXY=169.254.169.254 # Toメールアドレス to=$1 # メール件名 subject=$2 # メール本文 text=$3 # Fromメールアドレス from=$4 # メール送信 aws ses send-email --from "$from" --to $to --subject "$subject" --text "$text" --region $region
Zabbix Server
Zabbix ServerのGUIから行う設定を整理します。
メディアタイプ
管理 -> メディアタイプ から、スクリプトを登録します。
スクリプトパタメータに登録した内容が、スクリプトの引数になります。
スクリプトパラメータの4つ目には、Fromメールアドレスを指定します。
メディアタイプ -> スクリプトパラメータ | 値を定義するメニュー | スクリプトの引数 |
{ALERT.SENDTO} | ユーザ -> メディア | $1 |
{ALERT.SUBJECT} | アクション -> デフォルトの件名 | $2 |
{ALERT.MESSAGE} | アクション -> デフォルトのメッセージ | $3 |
Fromメールアドレス(≠マクロ) | - | $4 |
ユーザ
管理 -> ユーザ -> ユーザ名を選択 -> メディア から、先ほど追加したメディアを選択します。
送信先にToメールアドレスを入力します。入力した値は、メディアタイプの{ALERT.SENDTO}
として参照されます。
アクション
設定 -> アクション -> イベントソース -> トリガー -> アクションの作成を選択します。
アクションの名前を入力します。その他はデフォルト値とします。
画面中のデフォルトの件名が{ALERT.SUBJECT}
として、参照されます。また、デフォルトのメッセージは{ALERT.MESSAGE}
として、参照されます。
アクションの実行条件は、デフォルト値としました。
アクションの実行内容では、送信するユーザグループ(またはユーザ)、メディアを指定します。
実行結果
メール
Zabbixエージェントを停止(systemctl stop zabbix-agent
)すると、メール通知が行われました。
プロキシログ
プロキシサーバの/var/log/squid/access.log
には以下のログが残っていました。
SESのAPI(HTTPS)エンドポイントに、TCP
:443ポートで接続された事がわかります。
1460538528.030 571 ZabbixServer-PrivateIP TCP_MISS/200 3320 CONNECT email.us-west-2.amazonaws.com:443 - DIRECT/54.***.**.** -
参考
以下のページを参考にさせて頂きました。
おわりに
ZabbixとAWS CLIのses send-email
コマンドを利用し、プロキシ経由でメール通知を行いました。
Zabbix以外でもses send-email
コマンドが活きるシーンがあると思いますので、頭の片隅に置いて頂けると嬉しいです。
くコ:彡